A digital storage system typically contains one or more client storage systems and storage controllers. Storage controllers typically include components such as a processor, memory (e.g., dynamic random access memory (DRAM)), a network interface, and one or more secondary storage devices (e.g., disk drives or flash memory). Client devices typically connect through a front-side network, e.g., Ethernet, Fiber Chanel, Infiniband, over which the client devices submit read and write requests. Considerations in digital storage systems include high performance (input/output (I/O) throughput and response time), high reliability (data should not be lost as a result of a single device failure), and robust availability (service should continue despite a single device failure).
Secondary storage devices typically have limited capacity and I/O throughput, and are subject to many modes of failure. Including multiple controllers in a digital storage system can provide higher scalability, storage capacity, and I/O throughput. Multiple storage controllers are often interconnected to mirror data and forward requests. This interconnection is often achieved through a dedicated back-side network.
Multi-controller systems can be designed to be active/stand-by, where a primary controller handles all requests and a secondary controller waits to take over if the primary controller fails. However, this is wasteful. Better performance can be achieved if the system is designed to be active/active, where each controller serves a roughly equal share of the requests. If a controller fails in an active/active system, the surviving controller(s) may divide up and take over the requests that were previously handled by the failed controller.